Skip to content

feat(coop): config-driven multi-rendezvous server selection#25

Merged
xcomcoopdev merged 1 commit into
xcomcoopdev:mainfrom
NonPolynomialTim:feature/multi-rendezvous-server
Jul 9, 2026
Merged

feat(coop): config-driven multi-rendezvous server selection#25
xcomcoopdev merged 1 commit into
xcomcoopdev:mainfrom
NonPolynomialTim:feature/multi-rendezvous-server

Conversation

@NonPolynomialTim

@NonPolynomialTim NonPolynomialTim commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

The main reason for this change is that the repo immediately gives an error when pressing the "COOP" button if the rendezvous server keys are not compiled into the build, locking players out of TCP as well. This fixes that by gracefully failing, while future-proofing UDP: should the current rendezvous server cease to exist for whatever reason the community can now host their own.

Move the rendezvous host/ports/version/public-keys out of source into a runtime rendezvous.json holding multiple named servers. The Server Browser gains a top-right combobox to pick the active server; all coop operations use the selection. rendezvous.cfg goes in the root of the build directory, next to OpenXcom.exe.

  • rendezvous_config: JSON servers[], atomic active index, per-index accessor; active-server accessors keep their signatures so existing glue is unchanged
  • DisableableComboBox: ComboBox subclass with per-option enable/disable (setColor face + setTextColor label kept independent)
  • glue: probeRendezvousServer / probeAllRendezvousServersAsync (punch-free LIST_ROOMS health check)
  • ServerList: combobox top-right; parallel probes on entry; per-server status drives "(Wait...)"/"(offline)" labels, greyed disabled rows, dimmed button label when the selection is offline, and an animated "Fetching server list ..." / offline warning in a shared textbox; selection persisted by name in rendezvous_selection.json with fallback to the first server
  • title left-aligned to the left-column widgets

Waiting:
image

All servers down:
image

Server up:
image

Move the rendezvous host/ports/version/public-keys out of source into a
runtime rendezvous.json holding multiple named servers. The Server Browser
gains a top-right combobox to pick the active server; all coop operations use
the selection.

- rendezvous_config: JSON servers[], atomic active index, per-index accessor;
  active-server accessors keep their signatures so existing glue is unchanged
- DisableableComboBox: ComboBox subclass with per-option enable/disable
  (setColor face + setTextColor label kept independent)
- glue: probeRendezvousServer / probeAllRendezvousServersAsync (punch-free
  LIST_ROOMS health check)
- ServerList: combobox top-right; parallel probes on entry; per-server status
  drives "(Wait...)"/"(offline)" labels, greyed disabled rows, dimmed button
  label when the selection is offline, and an animated "Fetching server list
  ..." / offline warning in a shared textbox; selection persisted by name in
  rendezvous_selection.json with fallback to the first server
- title left-aligned to the left-column widgets

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@xcomcoopdev

Copy link
Copy Markdown
Owner

Yeah, that was a lazy implementation from me. I just put the rendezvous config directly in the source code, so it was not possible to use multiple rendezvous servers.

This feature is also useful because if my rendezvous server does not work for some reason, the game can still fall back to the community rendezvous servers.

Good that you fixed it. Keep going! :)

@xcomcoopdev xcomcoopdev merged commit 02d99b6 into xcomcoopdev:main Jul 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants